package com.dys.ai.mapper;

import com.dys.ai.common.dto.SeatDTO;
import com.dys.ai.entity.Seat;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 座位相关mapper
 */
@Mapper
public interface SeatMapper {

    /**
     * 1.根据座位编号 查询 座位状态和版本号
     *
     * @param seatId 座位编号
     * @return 座位信息
     */
    Seat selectSeatById(Long seatId);

    /**
     * 2.更新座位状态（乐观锁）
     *
     * @param seatId  座位编号
     * @param version 版本号
     */
    int updateSeatStatusAndVersion(@Param("seatId") Long seatId,
                                   @Param("version") Integer version);

    /**
     * 3.根据车次ID和座位类型查询可用座位（未被占用）
     */
    Seat getAvailableSeat(
            @Param("trainId") Long trainId,
            @Param("seatType") int seatType
    );

    /**
     * 根据车次ID和座位号查询可用座位
     *
     * @param newTrainId    车次ID
     * @param newSeatNumber 座位号（如 "9B"）
     * @return 可用座位对象（若不可用或不存在则返回 null）
     */
    Seat selectAvailableSeat(@Param(value = "newTrainId") Long newTrainId,@Param("carriageNumber") Integer carriageNumber, @Param(value = "newSeatNumber") String newSeatNumber);

    /**
     * 根据ID更新座位状态
     * @param seat 座位对象（需包含主键ID）
     */
    void updateById(Seat seat);

    /**
     * 查询所有座位信息
     */
    List<SeatDTO> selectSeats();
}
